﻿using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
using Acaweb.Model.Entities;

namespace Acaweb.Servicios.Contracts
{
    [ServiceContract]
    public interface IInstitucionesService
    {
        /// <summary>
        /// Provee la lista de todas las instituciones registradas
        /// </summary>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "GetAll", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Instituciones> GetAll();

        /// <summary>
        /// Retorna la información de una unica institución
        /// </summary>
        /// <param name="CodigoInstitucion"></param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "GetById", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        Instituciones GetById(int CodigoInstitucion);

        /// <summary>
        /// Agrega una nueva institución
        /// </summary>
        /// <param name="Institucion"></param>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "Create", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        void Create(Instituciones Institucion);

        /// <summary>
        /// Elimina una institución del sistema
        /// </summary>
        /// <param name="Institucion"></param>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "Delete", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        void Delete(Instituciones Institucion);

        /// <summary>
        /// Actualiza los datos correspondientes a una institución
        /// </summary>
        /// <param name="Institucion"></param>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "Update", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        void Update(Instituciones Institucion);
    }
}
